home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 19 / CD_ASCQ_19_010295.iso / dos / prg / pas / swag / keyboard.swg / 0059_Musical Keyboard Handler.pas < prev    next >
Pascal/Delphi Source File  |  1993-11-26  |  2KB  |  48 lines

  1. {
  2. You'll have to write a new Keyboard hardware interrupt handler, I did that
  3. (quite a while ago) for this little program. It generates a different beep
  4. sound for every key pressed. The comments are in Dutch, but if you can read
  5. Afrikaans you might be able to understand them. I think the code is self-
  6. explanatory anyway.
  7. }
  8.  
  9. program MusicKey;                                    { herziene versie }
  10.  
  11. uses crt, dos;
  12.  
  13. const kbd_data   = $60;                   { Keyboard data poort        }
  14.       kbd_ctrl   = $61;                   { Keyboard control poort     }
  15.       int_ctrl   = $20;                   { Interrupt control poort    }
  16.       eoi        = $20;                   { End-of-interrupt constante }
  17.       release    = $80;                   { Key released bit           }
  18.       enable_kbd = $80;                   { Enable keyboard bit        }
  19.  
  20. const Press      : Byte = 0;    { Scancode van ingedrukte toets        }
  21. var   SaveInt09  : Pointer;     { Om originele intvector in te bewaren }
  22.  
  23. Procedure NewKbdInt; interrupt;        { Interrupt service routine,    }
  24. var b:Byte;                            { aangeroepen door kbd hardware }
  25. begin
  26.   b:=Port[kbd_data];                    { Lees scancode van poort      }
  27.   if b = Press + Release then Press:=0  { Laatst ingedrukte toets los? }
  28.     else if b < Release then Press:=b;  { Toets ingedrukt? Press:=b    }
  29.   b:=Port[kbd_ctrl];                    { Interrupt netjes afwerken    }
  30.   Port[kbd_ctrl]:=b or enable_kbd;
  31.   Port[kbd_ctrl]:=b;
  32.   Port[int_ctrl]:=eoi;
  33. end;
  34.  
  35. begin
  36.   GetIntVec($9,SaveInt09);                  { Bewaar originele vector  }
  37.   SetIntVec($9,@NewKbdInt);                 { Installeer onze routine  }
  38. {***}
  39.   Writeln(^J^J^M,'Escape = Exit');
  40.   repeat
  41.     Write(^M,'Gelezen scancode: ',Press:2);     { Druk scancode af     }
  42.     if Press > 1 then Sound(100 * Press)        { Laat toontje horen   }
  43.                  else NoSound;                  { Of niet (Press = 0)  }
  44.   until Press = 1;                              { Escape : Press = 1   }
  45. {***}
  46.   SetIntVec($9,SaveInt09);                  { Herstel originele vector }
  47. end.
  48.